#ifndef KERNEL_STDARG_H
#define KERNEL_STDARG_H

#include <type.h>

typedef char *va_list; // 指针
#define va_start(ap, v) (ap = (va_list)&v + sizeof(char *))
#define va_arg(ap, t) (*(t *)((ap += sizeof(char *)) - sizeof(char *)))
#define va_end(ap) (ap = (va_list)NULL)

/*
// 不定参数从右向左压入栈中，最后一个是参数个数
// 比如printf，最后一个是format，通过format的%d等可知参数个数
*/
// void test_args(int cnt, ...) // 指向cnt的下一个是参数的地址
// {
//     va_list args; // 宏展开char * args
//     va_start(args, cnt); // 宏展开(args = (va_list)&cnt + sizeof(char *)) 使得args指向下一个参数的地址
//     int arg;
//     while (cnt--) {
//         arg = va_arg(args, int); //宏展开(*(int *)((args += sizeof(char *)) - sizeof(char *)))获取参数值
//     }
//     va_end(args); // 宏展开(args = (va_list)NULL)， 让args赋值空指针
// }

#endif